#include "Coisa.h"
#include "SDL.h"
#include "SDL_image.h"

Coisa::Coisa(string path, int sx, int sy, int x, int y, int red, int green, int blue)
{
	spritePath = path;
	sizeX = sx;
	sizeY = sy;
	posX = x;
	posY = y;
	velX = 0;
	velY = 0;
	bgColorRed = red;
	bgColorBlue = blue;
	bgColorGreen = green;
}

Coisa::~Coisa(void)
{
}

SDL_Surface* Coisa::getSurface()
{
	return surface;
}

void Coisa::setSpritePath(string path)
{
	spritePath = path;
}

void Coisa::loadSpriteIntoSurface()
{
	tempSurface = IMG_Load(spritePath.c_str());

	if( tempSurface != NULL ) 
	{ 
		/* A superficie carregada pode nao ter o mesmo bpp da tela. A funcao
		   abaixo realiza a conversao. Caso a conversao nao fosse feita logo 
		   apos o carregamento da superficie, a SDL faria a conversao toda vez
		   que a superficie fosse renderizada, causando problema de performance */
		surface = SDL_DisplayFormat(tempSurface); 
		SDL_FreeSurface(tempSurface); 
		if( surface != NULL ) { 
			/* Removemos o background do sprite */
			Uint32 colorkey = SDL_MapRGB( surface->format, bgColorRed, bgColorGreen, bgColorBlue);
			SDL_SetColorKey( surface, SDL_SRCCOLORKEY, colorkey );
		}
	}
}

void Coisa::freeSurface()
{
	SDL_FreeSurface(surface); 
}

void Coisa::setPosX(int x)
{
	posX = x;
}

int Coisa::getPosX()
{
	return posX;
}

void Coisa::setPosY(int y)
{
	posY = y;
}

int Coisa::getPosY()
{
	return posY;
}

void Coisa::setVelX(int x)
{
	velX = x;
}

int Coisa::getVelX()
{
	return velX;
}

void Coisa::setVelY(int y)
{
	velY = y;
}

int Coisa::getVelY()
{
	return velY;
}

void Coisa::setBgColorRed(int color)
{
	bgColorRed = color;
}

int Coisa::getBgColorRed()
{
	return bgColorRed;
}

void Coisa::setBgColorGreen(int color)
{
	bgColorGreen = color;
}

int Coisa::getBgColorGreen()
{
	return bgColorGreen;
}

void Coisa::setBgColorBlue(int color)
{
	bgColorBlue = color;
}

int Coisa::getBgColorBlue()
{
	return bgColorBlue;
}

void Coisa::setSizeX(int x)
{
	sizeX = x;
}

int Coisa::getSizeX()
{
	return sizeX;
}

void Coisa::setSizeY(int y)
{
	sizeY = y;
}

int Coisa::getSizeY()
{
	return sizeY;
}